// 二次封装请求方法要什么：
// 1. 处理请求地址的公共部分，包含 协议(http)、域名(localhost)、端口(8002/3020)
// 2. 公共的处理从本地拿token放到请求头中
// 3. 如果有上传相关的接口，请求头必须特殊设置，所以请求的方法必须兼容自定义设置请求头
// 4. 对接口响应的数据做公共的处理，如：响应状态码的处理

// 定义了一个变量myRequest，“=”是赋值，给这个变量赋予以方法(函数)体
// const myRequest = () => {
	
// }

// 方法接收参数：包含：
// 1. url: 请求地址
// 2. pubUrl: 自定义的公共前缀
// 3. header: 自定义的请求头
// 4. method: 请求方式
// 5. data: 参数
function myRequest({
	url,
	pubUrl,
	header = {},
	method = 'GET',
	data = {}
}) {
	// 定义公共前缀变量，并赋值，赋值的时候判断环境,判断import.meta.env.MODE，如果值是development的话则是开发环境，否则是生产环境
	// 如果传了自定义的公共前缀，则用传进来的，没有的话再判断环境根据环境取公共前缀
	const baseUrl = pubUrl ? pubUrl : import.meta.env.MODE === 'development' ? 'http://localhost:8002' : 'http://www.baidu.com'
	const token = uni.getStorageSync('token')
	// header
	const realHeader = token ? {
		token,
		...header
	} : header
	return new Promise((resolve, reject) => {
		uni.$u.showLoading()
		uni.request({
			url: baseUrl + url, 
			header: realHeader,
			method,
			data,
			success(res) {
				if(res.statusCode === 200) {
					resolve(res.data)
				} else {
					uni.$u.toast('服务器异常')
					reject('服务器异常')
				}
			},
			fail(err) {
				uni.$u.toast('服务器异常')
				reject(err)
			}
		})
	})
	
}

export default myRequest



// {
// 	"content-type": 'abc',
// 	'def': 123
// }


// {
// 	"content-type": 'abc',
// 		'def': 123,
// 		token: 123123
// }